package com.xsherl.leetcode.solution;

import cn.hutool.core.lang.Assert;
import com.xsherl.leetcode.base.ListNode;

public class SwapNodesInPairs {

    /**
     * 交换链表的两个节点可以分为两个步骤
     * 1、删除前一个节点
     * 2、将前一个节点插入到后一个节点后面
     *
     * @param head
     * 链表中节点的数目在范围 [0, 100] 内
     * 0 <= Node.val <= 100
     */
    public ListNode swapPairs(ListNode head) {
        ListNode root = new ListNode(-1, head), tail = root;
        int i = 0;
        while (tail.next != null && tail.next.next != null){
            if (i % 2 == 0){
                ListNode front = tail.next;
                ListNode behind = tail.next.next;
                // 删除前一个节点
                tail.next = behind;
                // 在后一个节点的后面插入前一个节点
                front.next = behind.next;
                behind.next = front;
            }
            i++;
            tail = tail.next;
        }
        return root.next;
    }

    public static void main(String[] args) {
        ListNode head = ListNode.build(1, 2, 3, 4, 5, 6);
        ListNode res = new SwapNodesInPairs().swapPairs(head);
        System.out.println(res);
        Assert.isTrue(ListNode.build(2,1,4,3, 6, 5).equals(res));
    }

}
